#ifndef _COMMAND_H
#define _COMMAND_H

/*
 * Funcion: help
 * -------------
 * Muestra la ayuda.
 */
int help(int argc, char *argv[]);

/*
 * Funcion: ps
 * -----------
 * Muestra por los procesos del sistemam detallando Process ID, padre, estado,
 * terminal (y si es "background") y comando del proceso.
 */
int ps(int argc, char *argv[]);

/*
 * Funcion: top
 * ------------
 * Detalla lo mismo que la funcion ps pero tambien muestra el CPU% utilizado
 * por cada proceso.
 */
int top(int argc, char *argv[]);
/*
 * Funcion: kill
 * -------------
 * Termina el proceso del Process ID especificado.
 */
int kill(int argc, char *argv[]);


/*
 * Funcion: killall
 * -------------
 * Termina todos los procesos con el nombre especificado y estatus indicado.
 */
int killall(int argc, char *argv[]);

/*
 * Funcion: idle
 * -------------
 * Lanza un proceso que se queda ejecutando infinitamente sin hacer nada.
 */
int idle(int argc, char *argv[]);

/*
 * Funcion: count
 * --------------
 * Imprime por los numeros enteros del 1 hasta el numero ingresado como primer
 * argument
 */
int count(int argc, char *argv[]);

/*
 * Funcion: yes
 * --------------
 * Imprime infinitamente en un loop el string que se le pasa como primer
 * argumento.
 */
int yes(int argc, char *argv[]);

/*
 * Funcion: clear
 * --------------
 * Limpia lo impreso en pantalla dejando el "prompt" en la primera linea.
 */
int clear(int argc, char *argv[]);

/*
 * Funcion: setdate
 * ----------------
 * Permite cambiar la fecha y hora del sistema interactivamente por.
 */
int setdate(int argc, char *argv[]);

/*
 * Funcion: getdate
 * ----------------
 * Imprime la fecha y hora del sistema.
 */
int getdate(int argc, char *argv[]);

/*
 * Funcion: test_args
 * ------------------
 * Muestra por "salida estandar" los argumentos recibidos por la linea de
 * comandos, a modo de prueba del funcionamiento de argc y argv.
 */
int test_args(int argc, char *argv[]);

/*
 * Funciones: waitpid_test, sleep_test
 * -----------------------------------
 * Muestran por "salida estandar" informacion de las pruebas de los
 * "system calls" waitpid y sleep.
 */
int waitpid_test(int argc, char *argv[]);
int sleep_test(int argc, char *argv[]);

/*
 * Funciones: shm_test, malloc_test
 * -----------------------------------
 * Muestran por "salida estandar" informacion de las pruebas del malloc y el IPC
 * de shared memory.
 */
int shm_test(int argc, char *argv[]);
int malloc_test(int argc, char *argv[]);

/*
 * Funcion: init
 * -------------
 * Inicializa el multitasking. Es la raiz del arbol del procesos.
 * No puede ser invocado por linea de comandos.
 */
int init(int argc, char *argv[]);

/*
 * Funcion: echo
 * -------------
 * Toma caractres del teclado y los vuelve a escribir.
 */
int echo(int argc, char *argv[]);

/*
 * Funcion: echo
 * -------------
 * Vuelve la tarea especificada como primer argumento de la tty en la que se
 * esta al foreground. Si mas de una existe vuelve solo 1 por vez que se invoca.
 *
 */
int fg(int argc, char *argv[]);

/*
 * Funcion: reboot
 * -------------
 * Reinicia el sistema.
 *
 */
int reboot(int argc, char *argv[]);

/*
 * Funciones: fibonacci, fibonacci_wrap
 * ------------------------------------
 * Funciones (programas) de testeo que crean un sub-arbol de procesos con la
 * estructura de un arbol de Fibonacci.
 */
int fibonacci(int argc, char *argv[]);
int fibonacci_wrap(int argc, char *argv[]);

/*
 * Funcion: priority
 * -----------------
 * Segun reciba on u off utiliza un algoritmo de scheduling con prioridades o no
 */
int priority(int argc, char *argv[]);

/*
 * Funcion: page_test
 * -----------------
 * Debugging de paginacion
 */
int page_test(int argc, char *argv[]);

#endif /* _COMMAND_H */

